<?php
//====================================================
// FileName:images.inc.php
// Summary: 图片处理程序
//====================================================

class images
{
	var $sourcePath; //图片存储路径
	var $galleryPath; //图片缩略图存储路径
	var $toFile = false; //是否生成文件
	var $fontName; //使用的TTF字体名称
	var $maxWidth = 500; //图片最大宽度
	var $maxHeight = 600; //图片最大高度

	//==========================================
	// 函数: images($sourcePath ,$galleryPath, $fontPath)
	// 功能: constructor
	// 参数: $sourcePath 图片源路径(包括最后一个"/")
	// 参数: $galleryPath 生成图片的路径
	// 参数: $fontPath 字体路径
	//==========================================
	function images($sourcePath, $galleryPath, $fontPath)
	{
		$this->sourcePath = rtrim($sourcePath,'/') . '/';
		$this->galleryPath = rtrim($galleryPath,'/') . '/';
		$this->fontName = $fontPath . "4.ttf";
	}

	//==========================================
	// 函数: makeThumb($sourFile,$width=128,$height=128)
	// 功能: 生成缩略图(输出到浏览器)
	// 参数: $sourFile 图片源文件
	// 参数: $width 生成缩略图的宽度
	// 参数: $height 生成缩略图的高度
	// 返回: 0 失败 成功时返回生成的图片路径
	//==========================================
	function makeThumb($sourFile,$width=128,$height=128)
	{
		$imageInfo = $this->getInfo($sourFile);
		$sourFile = $this->sourcePath . $sourFile;

		$newName = substr($imageInfo["name"], 0, strrpos($imageInfo["name"], ".")) . "_s.jpg";
		switch ($imageInfo["type"])
		{
			case 1: //gif
			$img = imagecreatefromgif($sourFile);
			break;
			case 2: //jpg
			$img = imagecreatefromjpeg($sourFile);
			break;
			case 3: //png
			$img = imagecreatefrompng($sourFile);
			break;
			default:
				return 0;
				break;
		}
		if (!$img)
		return 0;

		$srcW = $imageInfo["width"];
		$srcH = $imageInfo["height"];

		$times1 = ($srcW / $width);
		$times2 = ($srcH / $height);
		$times = min($times1,$times2);

		//*
		if (function_exists("imagecreatetruecolor")) //GD2.0.1
		{
			$new = imagecreatetruecolor($width, $height);
			ImageCopyResampled($new, $img, 0, 0, 0, 0, $width, $height, $width * $times, $height * $times);
		}
		else
		{
			$new = imagecreate($width, $height);
			ImageCopyResized($new, $img, 0, 0, 0, 0, $width, $height, $width * $times, $height * $times);
		}
		//*/
		if ($this->toFile)
		{

			if (file_exists($this->galleryPath . $newName))
			unlink($this->galleryPath . $newName);
			ImageJPEG($new, $this->galleryPath . $newName, 100);
			return $this->galleryPath . $newName;
		}
		else
		{
			ImageJPEG($new, 100);
		}

		ImageDestroy($new);
		ImageDestroy($img);

	}
	//==========================================
	// 函数: waterMark($sourFile, $text)
	// 功能: 给图片加水印
	// 参数: $sourFile 图片文件名
	// 参数: $text 文本数组(包含二个字符串)
	// 返回: 1 成功 成功时返回生成的图片路径
	//==========================================
	function waterMark($sourFile, $text)
	{
		$imageInfo = $this->getInfo($sourFile);
		$sourFile = $this->sourcePath . $sourFile;
		$newName = substr($imageInfo["name"], 0, strrpos($imageInfo["name"], ".")) . "_mark.jpg";
		switch ($imageInfo["type"])
		{
			case 1: //gif
			$img = imagecreatefromgif($sourFile);
			break;
			case 2: //jpg
			$img = imagecreatefromjpeg($sourFile);
			break;
			case 3: //png
			$img = imagecreatefrompng($sourFile);
			break;
			default:
				return 0;
				break;
		}
		if (!$img)
		return 0;

		$width = ($this->maxWidth > $imageInfo["width"]) ? $imageInfo["width"] : $this->maxWidth;
		$height = ($this->maxHeight > $imageInfo["height"]) ? $imageInfo["height"] : $this->maxHeight;
		$srcW = $imageInfo["width"];
		$srcH = $imageInfo["height"];
		if ($srcW * $width > $srcH * $height)
		$height = round($srcH * $width / $srcW);
		else
		$width = round($srcW * $height / $srcH);
		//*
		if (function_exists("imagecreatetruecolor")) //GD2.0.1
		{
			$new = imagecreatetruecolor($width, $height);
			ImageCopyResampled($new, $img, 0, 0, 0, 0, $width, $height, $imageInfo["width"], $imageInfo["height"]);
		}
		else
		{
			$new = imagecreate($width, $height);
			ImageCopyResized($new, $img, 0, 0, 0, 0, $width, $height, $imageInfo["width"], $imageInfo["height"]);
		}
		$white = imageColorAllocate($new, 255, 255, 255);
		$black = imageColorAllocate($new, 0, 0, 0);
		$alpha = imageColorAllocateAlpha($new, 230, 230, 230, 40);
		//$rectW = max(strlen($text[0]),strlen($text[1]))*7;
		ImageFilledRectangle($new, 0, $height-26, $width, $height, $alpha);
		ImageFilledRectangle($new, 13, $height-20, 15, $height-7, $black);
		ImageTTFText($new, 6.8, 0, 20, $height-14, $black, $this->fontName, $text[0]);
		ImageTTFText($new, 6.8, 0, 20, $height-6, $black, $this->fontName, $text[1]);
		//*/
		if ($this->toFile)
		{
			if (file_exists($this->galleryPath . $newName))
			unlink($this->galleryPath . $newName);
			ImageJPEG($new, $this->galleryPath . $newName);
			return $this->galleryPath . $newName;
		}
		else
		{
			ImageJPEG($new);
		}
		ImageDestroy($new);
		ImageDestroy($img);

	}
	//==========================================
	// 函数: displayThumb($file)
	// 功能: 显示指定图片的缩略图
	// 参数: $file 文件名
	// 返回: 0 图片不存在
	//==========================================
	function displayThumb($file)
	{
		$thumbName = substr($file, 0, strrpos($file, ".")) . "_thumb.jpg";
		$file = $this->galleryPath . $thumbName;
		if (!file_exists($file))
		return 0;
		$html = " <img src='$file' >";
		echo $html;
	}

	function insertimg($file){
		$thumbName = substr($file, 0, strrpos($file, ".")) . "_thumb.jpg";
		$file = $this->galleryPath . $thumbName;
		if (!file_exists($file))
		return 0;
		return $file;

	}

	//==========================================
	// 函数: displayMark($file)
	// 功能: 显示指定图片的水印图
	// 参数: $file 文件名
	// 返回: 0 图片不存在
	//==========================================
	function displayMark($file)
	{
		$markName = substr($file, 0, strrpos($file, ".")) . "_mark.jpg";
		$file = $this->galleryPath . $markName;
		if (!file_exists($file))
		return 0;
		$html = " <img src='$file' >";
		echo $html;
	}

	//==========================================
	// 函数: getInfo($file)
	// 功能: 返回图像信息
	// 参数: $file 文件路径
	// 返回: 图片信息数组
	//==========================================
	function getInfo($file)
	{
		$file = $this->sourcePath . $file;
		$data = getimagesize($file);
		$imageInfo["width"] = $data[0];
		$imageInfo["height"]= $data[1];
		$imageInfo["type"] = $data[2];
		$imageInfo["name"] = basename($file);
		return $imageInfo;
	}

}


/**

//header("Content-type: image/jpeg");//输出到浏览器的话别忘了打开这个
$img = new images(IB_UPLOAD_PATH, IB_GALLERY, IB_TEMP);
$text = array("ice-berg.org","all rights reserved");
$img->maxWidth = $img->maxHeight = 300;
$img->toFile = true;
$img->waterMark("mm.jpg", $text);
$img->makeThumb("mm.jpg");
$img->displayThumb("mm.jpg");
$img->displayMark("mm.jpg");

*/
?>
